In complex computer systems communication is often desirable between disparate applications. One approach to such communication is to implement a system architecture for programming and executing message flows. Such message flows transfer messages between different components in the computer system (either within a single computer or distributed over more than one computer). For example, message flows may be used to carry out database transactions in a distributed computing environment.
An example of a commercially available message flow architecture is the MQ Series Integrator developed by IBM Corporation (MQSI). This architecture supports a visual programming interface to permit developers to define message flows.
In a message flow architecture such as MQSI, a message flow is defined using nodes that represent message input, computation, database access, filtering, and output of messages. Message flows are represented as nodes connected in a manner defined by the developer. The defined message flows may be nested and have many other features found in conventional computer programs. Message flow environments typically provide development tools used by developers to define the message flows which run separately from the executable message flows themselves.
In defining a message flow a developer may inadvertently introduce errors or bugs that are not discovered until the defined message flow is tested. Message flow development environments may provide a debugging facility to assist the developer in uncovering bugs in the message flow design.
To facilitate debugging of a target message flow, message flow development environments such as MQSI permit the developer to specify a debug session. One way of providing for a debug session is to insert debug nodes between each node in the target message flow. The message flow developer is then able to specify certain of the debug nodes to be breakpoints. In this approach, the message flow architecture includes a debug controller component (perhaps part of the development component) and the debug nodes are implemented as plugins. Because the defined message flow executes separately from the development components such as a debug controller, there must be a communication channel established between the debug controller and the message flow being debugged.
One mechanism for such communication is to define the debug node plugins such that when a message reaches each plugin debug node, the node will use the communication channel to communicate with the debug controller. The debug controller then determines whether the developer has defined the plugin node to be a breakpoint. If the plugin debug node is defined to be a breakpoint, data is displayed to the developer to assist in debugging the message flow.
The communication between the debug plugin node and the debug controller typically occurs using a distributed computing communication mechanism such as TCP/IP sockets, Asynchronous Transfer Mode protocol, System Network Architecture, Novell Netware or Banyan Vines, depending on the machine platform used by the message flow environment. This type of communication between the executable message flow and the debug controller component introduces a potentially significant overhead into the debugging process as sockets and similar mechanisms may be relatively slow and each debug plugin node is required to use the mechanism to communicate with the debug controller.
With such an approach, debugging for small numbers of messages through a defined message flow may be feasible. However, for certain types of defined message flows it is desirable or necessary to permit a high volume of messages to be processed by the defined message flow to determine the source of a detected error. In such a case the overhead required in communicating between debug plugin nodes and the debug controller potentially slows the operation of the defined message flow to such a degree that the usefulness of the debugging operation is affected.
It is therefore desirable to have a debugging facility for a message flow environment which permits high volumes of messages to be processed while debugging facilities are in place in a message flow, without significant detrimental overhead cost.